<?php
	
	// enable debug
	error_reporting	( E_ALL );
	
	// disable notices
	// Con | añado errores
	// Con ^ quito errores, para no ver los STRICT, e_all ^ e_strict
	// E_ERROR indica que se ha producido un error fatal que impide la ejecución del script.
	// E_WARNING indica una advertencia, la ejecucion del script continua.
	// E_NOTICE indica anotaciones sobre posibles errores, por ejemplo, variables no inicializadas, equivocaciones en los nombres de dichas variables, etc.
	// error_reporting		( E_ALL ^ E_NOTICE);
	
	// Otros casos
	// case E_ERROR: 														// 1 // 
	// case E_WARNING:														// 2 // 
	// case E_PARSE: 														// 4 // 
	// case E_NOTICE: 														// 8 // 
	// case E_CORE_ERROR: 													// 16 // 
	// case E_CORE_WARNING: 												// 32 // 
	// case E_COMPILE_ERROR: 												// 64 // 
	// case E_COMPILE_WARNING: 												// 128 // 
	// case E_USER_ERROR: 													// 256 // 
	// case E_USER_WARNING:													// 512 // 
	// case E_USER_NOTICE:													// 1024 // 
	// case E_STRICT:														// 2048 // 
	// case E_RECOVERABLE_ERROR:											// 4096 // 
	// case E_DEPRECATED: 													// 8192 // 
	// case E_USER_DEPRECATED: 												// 16384 // 
	
	// Mostrar los errores
	ini_set('display_errors', true);
	
	// Códigos de error para las aplicaciones
	define ( 'ERR_NO',														  0 );
	define ( 'ERR_PANIC',													  1 );
	define ( 'ERR_DIR_LOG_NOT_WRITEABLE',									  2 );
	define ( 'ERR_OPENNING_LOG',											  3 );
	define ( 'ERR_OPENNING_LOG_REWRITE',									  4 );
	define ( 'ERR_OPENNING_LANG',											  5 );
	define ( 'ERR_REPORTING_NOT_INCLUDED',									  6 );
	define ( 'ERR_DB_CONNECTION_FAIL',										  8 );
	define ( 'ERR_DB_CHECK_TABLES_FAIL',									  9 );
	define ( 'ERR_NOT_SESSION_START',										 10 );
	
	
	define ( "EXCEPTION_STRING",											"E X C E P T I O N" );
	define ( "ERROR_STRING",												"E R R O R" );
	
	define ( "DUMP_ERROR", 													FALSE );
	define ( "DUMP_EXCEPTION", 												FALSE );
	
	// Nombre de la aplicación 
	define ( "APPLICATION_NAME", 											"api" );
	
	// Rutas
	define ( 'DIR_CLASSES',													'classes' );
	define ( 'DIR_LOG',														'log' );
	define ( 'DIR_LANG',													'lang' );
	define ( 'DIR_EXTERNAL',												DIR_CLASSES . '/external' );
	
	define ( "DIR_APP_ROOT",												$_SERVER ['DOCUMENT_ROOT'] );
	define ( "DIR_APP_ROOT_URI",											DIR_APP_ROOT . $_SERVER ['REQUEST_URI'] );
	define ( "DIR_APP",														dirname ( DIR_APP_ROOT_URI ) . "/" );
	define ( "DIR_APP_LOG",													DIR_APP . DIR_LOG ."/" ); 
	define ( "DIR_APP_CLASSES",												DIR_APP . DIR_CLASSES ."/" ); 
	define ( "DIR_APP_LANG", 												DIR_APP . DIR_CLASSES ."/" . DIR_LANG . "/" ); 
	
	define ( 'DIR_OUTPUT_BACKUP',											DIR_APP . "/" . DIR_LOG );
	define ( 'DIR_OUTPUT_BACKUP_FILE',										DIR_OUTPUT_BACKUP . '/db-backup-'.APPLICATION_NAME.'.sql' );
	
	// Auditoria en fichero log
	// Prioridades en la auditoría
	define ( "AUDIT_NONE",													 0 ); // 00000000
	define ( "AUDIT_ERROR",													 1 ); // 00000001
	define ( "AUDIT_DB",													 2 ); // 00000010
	define ( "AUDIT_DB_SQL",												 4 ); // 00000100
	define ( "AUDIT_DB_SQL_FETCH",											 8 ); // 00010000
	define ( "AUDIT_APP",													16 ); // 00001000
	define ( "AUDIT_EXTEND",												32 ); // 00100000
	define ( "AUDIT_SESSION",												64 ); // 01000000 
	define ( "AUDIT_EXCEPTION",											   128 ); // 10000000 
	
	// all possible options, NO VEO LAS SESSIONES, es un coñazo
	// Este valor siempre tiene que ser el siguiente valor de auditoria - 1, con 255 está todo a 1 y veo todas la auditorias menores que 255
	define ( "AUDIT_ALL",            										255 ); 
	
	// Nivel de Auditoria - Choose the audit level to user
	define ( "AUDIT_LEVEL",          										AUDIT_ALL ); 
	
	// Definición de las variables de la application
	define ( "VERSION_HIGH",        										0 );
	define ( "VERSION_LOW",         										1 );
	define ( "VERSION_COMPILATION", 										5 );
	
	// El fichero de log de errores se complementará¡ con la fecha del día del error LOG_ERROR_[Base de Datos]_[Día de hoy].log
	define ( "LOG_NAME", 													"alert_". APPLICATION_NAME .".log" );
	//define ( "LOG_NAME", 													"alert_". APPLICATION_NAME . "_" .date("Ymd.H").".log" );
	
	// Variables que controla si se borra el LOG en cada acceso
    define ( "RESET_LOG" , 													TRUE );

	define ( "LOG_ACCESS_MODE_ADD",											"a" );
	// 'r'		Apertura para sólo lectura; coloca el puntero al fichero al principio del fichero.
	// 'r+'		Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero.
	// 'w'		Apertura para sólo escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear.
	// 'w+'		Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear.
	// 'a'		Apertura para sólo escritura; coloca el puntero al fichero al final del fichero. Si el fichero no existe se intenta crear.
	// 'a+'		Apertura para lectura y escritura; coloca el puntero al fichero al final del fichero. Si el fichero no existe se intenta crear.
	// 'x'		Creación y apertura para sólo escritura; coloca el puntero al fichero al principio del fichero. Si el fichero ya existe, la llamada a fopen() fallará devolviendo FALSE y generando un error de nivel E_WARNING. Si el fichero no exite se intenta crear. Esto es equivalente a especificar las banderas O_EXCL|O_CREAT para la llamada al sistema de open(2) subyacente.
	// 'x+'		Creación y apertura para lectura y escritura; de otro modo tiene el mismo comportamiento que 'x'.
	// 'c'		Abrir el fichero para sólo escritura. Si el fichero no existe se crea. Si existe no es truncado (a diferencia de 'w'), ni la llamada a esta función falla (como en el caso con 'x'). El puntero al fichero se posiciona en el principio del fichero. Esto puede ser útil si se desea obtener un bloqueo asistido (véase flock()) antes de intentar modificar el fichero, ya que al usar 'w' se podría truncar el fichero antes de haber obtenido el bloqueo (si se desea truncar el fichero, se puede usar ftruncate() después de solicitar el bloqueo).
	// 'c+'		Abrir el fichero para lectura y escritura; de otro modo tiene el mismo comportamiento que 'c'.
	define ( "LOG_ACCESS_MODE_REWRITE",										"w" );
	
	// Mostrar la fecha en la auditoria o no
	define ( "AUDIT_SHOW_LOG_DATE",											FALSE );
	
	// Mostrar más información en el log
	define ( "AUDIT_SHOW_EXPAND_LOG",										FALSE );
	
	// Tipos de Idioma
	// Si no está definido lo inicializo, es para evitar machacar otro idioma
	if (!defined('IDIOMA')) {
		define ( "IDIOMA",													'es' );
	}
	define ( "LOG_IDIOMA",													'lang.'. IDIOMA . '.php' ); // es
	
// Configuración de la Base de Datos
	define ( 'APP_MODE', 													'PRO' );
	
	if (defined('APP_MODE') && APP_MODE == 'PRO') {
		define ( "BD_SERVIDOR",  											"localhost" );
		define ( "BD_USUARIO",   											APPLICATION_NAME );
		define ( "BD_PASSWORD",  											APPLICATION_NAME );
		define ( "BD_NOMBRE",    											APPLICATION_NAME );
		define ( "BD_PORT",    												3306 );
		define ( "ENVIROMENT",    											APP_MODE );
	} else if (defined('APP_MODE') && APP_MODE == 'PRE') {
		define ( "BD_SERVIDOR",  											"localhost" );
		define ( "BD_USUARIO",   											APPLICATION_NAME );
		define ( "BD_PASSWORD",  											APPLICATION_NAME );
		define ( "BD_NOMBRE",    											APPLICATION_NAME );  
		define ( "BD_PORT",    												3306 );
		define ( "ENVIROMENT",    											APP_MODE );
	} else {
		define ( "BD_SERVIDOR",  											"localhost" );
		define ( "BD_USUARIO",   											APPLICATION_NAME );
		define ( "BD_PASSWORD",  											APPLICATION_NAME );
		define ( "BD_NOMBRE",    											APPLICATION_NAME );
		define ( "BD_PORT",    												3306 );	
		define ( "ENVIROMENT",    											APP_MODE );
	}
	
	// mysql online or offline
	define ( "BD_ENGINE",     												"MySQL" );
	
	define ( "DB_MAX_VERSION_REQUIRED",										0 );
	define ( "DB_MIN_VERSION_REQUIRED", 									5 );
	
	define ( "SALTO",														"<BR />" );
	define ( "SALTO_FILE",													"\r\n" );
	define ( "HTML_HEADER",													'http-equiv="Content-Type" content="text/html"; charset="utf-8"' );
	
	// Maximo intentos fallidos hasta bloqueo cuenta
	define ( "LOGIN_MAX_INTENTOS",      									3 ); 
	// Limite de tiempo en los intentos en 24h
	define ( "LOGIN_MAX_INTENTOS_TIME", 									86400 );
	
	// 60 * 60 * 24 * 7 = 604800 Máximo 7 días para un backup
	define ( "BACKUP_MAX_TIME",												604800 );
	
	// BACKUP TABLES 
	define( "OUTPUT_DIR",													'log');
	define( "TABLES", 														'*');
	
	// Variables de SESSIONES
	define ( "S_NAME", 														"SESSION_NAME");
	define ( "S_ID", 														"SESSION_ID");
	define ( "S_EMAIL", 													"SESSION_EMAIL");
	define ( "S_TIME", 														"SESSION_TIME");
	define ( "S_ERROR", 													"SESSION_ERROR");
	define ( "S_IP", 														"SESSION_IP");
	define ( "S_ADMIN", 													"SESSION_ADMIN");
	define ( "S_CONNECT_MODE", 												"SESSION_CONNECT_MODE");
	define ( "S_FORM_OPERATION", 											"SESSION_FORM_OPERATION");
	
	// Tablas
	define ( "TABLA_USUARIOS", 												"T_USUARIOS" );
	define ( "TABLA_INVITADOS",	 											"T_INVITADOS" );
	define ( "TABLA_CONFIGURACION",	 										"T_CONF" );
	define ( "TABLA_URL",			 										"T_URL" );
	
	// Array de Tablas
	$CHECK_TABLES = array(
		TABLA_USUARIOS,
		TABLA_INVITADOS,
		TABLA_CONFIGURACION,
		TABLA_URL
		//,TABLA_OPERACIONES,
		//,TABLA_ADMIN, 
		//,TABLA_CONEXION, 
		//,TABLA_LISTA_USUARIO,
		//,TABLA_LISTA_COMPRA, 
		//,TABLA_APLICACIONES,
		//,TABLA_MODOS_APP, 
		//,TABLA_USUARIO_APP, 
		//,TABLA_LC_ELEMENTOS,
		//,TABLA_ELEMENTOS_USUARIO
	);
	
	// Variables de Sesion
	define ( "NOMBRE_INVITADO", 											"INVITADO" );
	
	define ( "TIME_USUARIO", 												10 );			// 600 segundos - 10 minutos
	define ( "TIME_INVITADO", 												5  );			// 300 segundos -  5 minutos
	define ( "TIME_PENDING_ACTIVATE", 										120);			// 2 horas

	// Definimos los diferentes tipos de conexiones
	define ( "CONNECT_WEB", 												"APP_WEB" );
	define ( "CONNECT_MOVIL", 												"APP_MOVIL" );
	define ( "CONNECT_TABLET", 												"APP_TABLET" );
	define ( "CONNECT_NULL_CLIENT",											"NULL_CLIENT" );
	define ( "CONNECT_NULL_OPERATION", 										"NULL_OPERATION" );
	
	define ( 'HTTP_URL_REPLACE', 													1);
	define ( 'HTTP_URL_JOIN_PATH', 												2);
	define ( 'HTTP_URL_JOIN_QUERY', 												4);
	define ( 'HTTP_URL_STRIP_USER', 												8);
	define ( 'HTTP_URL_STRIP_PASS', 											   16);
	define ( 'HTTP_URL_STRIP_AUTH', 											   32);
	define ( 'HTTP_URL_STRIP_PORT', 											   64);
	define ( 'HTTP_URL_STRIP_PATH', 											  128);
	define ( 'HTTP_URL_STRIP_QUERY', 											  256);
	define ( 'HTTP_URL_STRIP_FRAGMENT', 										  512);
	define ( 'HTTP_URL_STRIP_ALL', 											 1024);
	
	define ( 'SHOW_CONSTANTS',												TRUE);
	define ( "SHOW_SUPERGLOBALS",											TRUE );
	
/*



if ($_SERVER['SERVER_PORT'] == '80') {
	$url = "http://{$_SERVER['SERVER_NAME']}" . dirname($_SERVER['PHP_SELF']);
} else {
	$url = "http://{$_SERVER['SERVER_NAME']}:{$_SERVER['SERVER_PORT']}" . dirname($_SERVER['PHP_SELF']);
}
echo $url;

if (substr($url, -1) != '/') {
	$url .= '/';
}
define('URL_BASE', $url);


echo URL_BASE;
unset($url);
die;

	
	
	
	
	// Gestión de errores
	


	
	
	
	
	

	

	 
	
	

	
	
	
	
	

	
	
	
	//define ( "TABLA_OPERACIONES",											"t_operaciones" );
	//define ( "TABLA_ADMIN", 												"t_admin_tablas" );
	//define ( "TABLA_CONEXION", 											"t_conexion" );
	//define ( "TABLA_LISTA_USUARIO",										"t_lista_usuario" );
	//define ( "TABLA_LISTA_COMPRA", 										"t_lista_compra" );
	//define ( "TABLA_APLICACIONES",										"t_aplicaciones" );
	//define ( "TABLA_MODOS_APP", 											"t_modos_aplicacion" );
	define ( "TABLA_USUARIO_APP", 											"t_usuario_aplicacion" );
	//define ( "TABLA_LC_ELEMENTOS",      									"t_lista_compra_elementos" );
	//define ( "TABLA_ELEMENTOS_USUARIO", 									"t_elementos_usuario" );
	
	
	
	// Contador gráfico y cookies
	define ( "COUNTER_COOKIE", 												"cookier_counter" );
	define ( "GRAFICAL_COUNTER", 											1 );
	define ( "NON_GRAFICAL_COUNTER", 										0 );


	
	// AUTO GEN PASSWORD http://www.thebitmill.com/tools/password.html
	define ( "IV",          												"fB&YR),lNZ2fmTX3" );
	define ( "SEMILLA",     												"o:~{m,pmFKeAg+o[r3b-9k2ue" );
	define ( "SEMILLA_JAVA",												"o{mpmFKAg+o[r3b-" );
	
	
	



	define ( "ERROR_SESSION",												"0x01001" );
	define ( "ERROR_BD",													"0x01002" );
	define ( "ERROR_TOOLS",													"0x01003" );
	define ( "ERROR_BDENGINE",												"0x01004" );
	define ( "ERROR_CRYPTER",												"0x01005" );
	
	*/

	
	?>
